home *** CD-ROM | disk | FTP | other *** search
- // when you focus on an item, the browser will automatically scroll it into view. This file provides additional functionality.
-
- // It enables the pg up/dn buttons, and it updates the buttons' positions when scrolling takes place (these positions are needed
-
- // when you move the focus, in order to calculate which other buttons on the page are closest)
-
-
-
- function pageUpDown(direction)
-
- {
-
- // This function determines what to do if the user presses the Page Up (+) or Page Down (-) key
-
-
-
- // Call the getScrollParent function to find the scrollable parent object
-
- var oScrollParent = getScrollParent()
-
- if (oScrollParent == null)
-
- {
-
- return
-
- }
-
- // find correct button to focus on
-
- var oScrollToBtn = getScrollToButton(oScrollParent, direction);
-
- oCurFocus = oScrollToBtn;
-
- oCurFocus.focus();
-
- // check if scrolling has taken place, and update positions of scrollable elements if needed
-
- if (didScroll())
-
- {
-
- updateScrollPositions()
-
- }
-
- }
-
-
-
- function getScrollParent()
-
- {
-
- /* For an item to scroll correctly when the user presses the Page Up (+) or Page Down (-) keys, it has to have a parent object that
-
- has its custom "MCScrollable" attribute set to "true". This function locates that parent object */
-
- // Start with the object that currently has focus ...
-
- var oTempObj = oCurFocus
-
- // ... then check its parent, grandparent, great-grandparent, and so on.
-
- for (i=0; i<5000; i++)
-
- {
-
- oTempObj = oTempObj.parentElement
-
- // Stop when you get to the scrollable parent element
-
- if (oTempObj.MCScrollable == "true")
-
- {
-
- return oTempObj
-
- }
-
- // If you get as high as the BODY tag without finding a scrollable parent element, return null
-
- if (oTempObj.tagName == "BODY")
-
- {
-
- return null
-
- }
-
- }
-
- }
-
-
-
- function getScrollToButton(oScrollParent, direction)
-
- {
-
- // This function determines which item to focus on next when the user presses the Page Up (+) or Page Down (-) key
-
-
-
- // find top & bottom of scroll parent relative to top of pg (don't worry about 2 px offset)
-
- var oBottomVisibleBtn = oCurFocus
-
- var oTopVisibleBtn = null
-
- var oLowerBtn
-
- var oHigherBtn = null
-
- //var oScrollToBtn
-
- var oScrollParentPos = oScrollParent.getBoundingClientRect()
-
- var nScrollParentTop = oScrollParentPos.top
-
- var nScrollParentBottom = oScrollParentPos.bottom
-
- var nScrollParentHeight = (nScrollParentBottom - nScrollParentTop)
-
-
-
- // go through all focusable elements in order;
-
- for (i=0; i<oScrollParent.all.length; i++)
-
- {
-
- //identify object
-
- var obj = oScrollParent.all(i)
-
- // make sure object is focusable
-
- if (obj.MCFocusable == "true" && direction == "down")
-
- {
-
- //find top of object
-
- var nObjTop = obj.nTopPos;
-
- // for the lowest btn whose top is visible (by at least two pixels), assign bottomVisibleBtn to object
-
- if ((nObjTop + 2) < nScrollParentBottom)
-
- {
-
- oBottomVisibleBtn = obj
-
- }
-
- // Find lowest button down to one Scroll Parent Height below bottom visible btn
-
- if (nObjTop < (nScrollParentBottom + nScrollParentHeight))
-
- {
-
- oLowerBtn = obj
-
- }
-
- }
-
- if (obj.MCFocusable == "true" && direction == "up")
-
- {
-
- var nObjBottom = obj.getBoundingClientRect().bottom;
-
- // for the first btn that's even partly visible, assign topVisibleBtn to object
-
- if (nObjBottom > nScrollParentTop && oTopVisibleBtn == null)
-
- {
-
- oTopVisibleBtn = obj
-
- }
-
- // Find first button that's within one Scroll Parent Height above top visible btn
-
- if (nObjBottom > (nScrollParentTop - nScrollParentHeight) && oHigherBtn == null)
-
- {
-
- oHigherBtn = obj
-
- }
-
- }
-
- }
-
- if (direction == "up")
-
- {
-
- if (oTopVisibleBtn != oCurFocus)
-
- {
-
- // if focus is not already on bottom visible btn, move focus to there and end function
-
- return oTopVisibleBtn
-
- }
-
- else
-
- {
-
- // If focus is already on bottom visible, focus on button one box height lower
-
- return oHigherBtn
-
- }
-
- }
-
-
-
- if (direction == "down")
-
- {
-
- if (oBottomVisibleBtn != oCurFocus)
-
- {
-
- // if focus is not already on bottom visible btn, return bottom visible btn and end function
-
- return oBottomVisibleBtn
-
- }
-
- else
-
- {
-
- // If focus is already on bottom visible, return button one box height lower than that
-
- return oLowerBtn
-
- }
-
- }
-
- }
-
-
-
- function didScroll()
-
- {
-
- // This function indicates whether current-focus item has scrolled or otherwise moved vertically on the page.
-
- // If the current-focus item's top position does not equal the position it was in when the page loaded, return true
-
- if((oCurFocus.getBoundingClientRect().top - 2) != oCurFocus.nTopPos)
-
- {
-
- return true
-
- }
-
- }
-
-
-
- function updateScrollPositions()
-
- {
-
- // object has scrolled; reset "nCenterYCoord" property for all scrolling buttons in box
-
- // so that auto nav will be based on new positions for buttons
-
- var oScrollParent = getScrollParent()
-
- if (oScrollParent == null)
-
- {
-
- oScrollParent = body
-
- }
-
- // for all objects in the parent container of the scrolling element
-
- for (i=0; i<oScrollParent.all.length; i++)
-
- {
-
- //identify object
-
- var obj = oScrollParent.all(i)
-
- // make sure object is focusable
-
- if (obj.MCFocusable == "true")
-
- {
-
- // reassign Y coordinate values for based on its new top position
-
- var tempObjPosition = obj.getBoundingClientRect();
-
- obj.nTopPos = tempObjPosition.top - 2
-
- obj.nBottomPos = tempObjPosition.bottom - 2
-
- var objCenterTop = (obj.nTopPos+(obj.nHeight/2))
-
- obj.nCenterYCoord = objCenterTop
-
- }
-
- }
-
- }
-
-
-
- ///////////////////////////////////////////////////////////////////////////////////////////////////
-
- // code for counter that indicates how many buttons are in scrolling menu, etc.
-
-
-
- // variable to indicate whether there is a counter on the page
-
- var isCounter = false
-
- // variable to hold array of scrolling buttons
-
- var aScrollBtnsArray
-
-
-
- function setCounter()
-
- {
-
- /* this function sets the numeric value for the item counter found at the lower right of
-
- each scrollable menu in the templates, to indicate how many focusable items are in the menu. */
-
- // Reset isCounter value to true, indicating that there is a counter on the page
-
- isCounter = true
-
- //Make array for scrolling buttons
-
- aScrollBtnsArray = new Array()
-
- // Loop through all focusable items in the scrolling span
-
- for (i=0; i<scrollspan.all.length; i++)
-
- {
-
- var obj = scrollspan.all(i)
-
- if(obj.MCFocusable == "true")
-
- {
-
- var nextElement = aScrollBtnsArray.length
-
- aScrollBtnsArray[nextElement] = obj
-
- }
-
- }
-
- // update the SPAN whose ID is "counterTotal" to reflect total number of focusable items in scrolling span
-
- counterTotal.innerHTML = aScrollBtnsArray.length
-
- }
-
-
-
- function updateCounter()
-
- {
-
- /* this function updates the numeric value for the item counter found at the lower right of
-
- each scrollable menu in the templates, to indicate which item currently has focus. */
-
-
-
- if (isCounter != true)
-
- {
-
- // if there is no counter on the page, return
-
- return
-
- }
-
- // variable to track whether focus is in scrollable menu
-
- var bFocusInMenu = false
-
- //Loop through all focusable items in scrolling menu
-
- for (i=0; i<aScrollBtnsArray.length; i++)
-
- {
-
- // if item currently has focus ...
-
- if (aScrollBtnsArray[i] == oCurFocus)
-
- {
-
- // set counter number to show which item has focus
-
- counterNum.innerHTML = (i + 1);
-
- // update variable to indicate focus is in scrollable menu
-
- bFocusInMenu = true
-
- }
-
- }
-
- // if focus in in menu, make sure arrows are not grayed out.
-
- if (bFocusInMenu == true)
-
- {
-
- itemCounterSpan.style.filter = "none"
-
- }
-
- // Else gray out arrows to indicate disabled state.
-
- else
-
- {
-
- itemCounterSpan.style.filter = "alpha(opacity=50)"
-
- }
-
- }
-
-